草庐IT

Java Swingworker 和多线程

全部标签

java - java线程池执行器如何处理中断的线程

我创建了一个包含10个固定线程的ThreadPool。有时我需要中断线程池中一个长时间运行的线程,主要是因为它们在某些操作中阻塞并且发生超时并且我中断了线程。我捕获了InterruptedException并将线程的状态也设置为中断。在那种情况下,我的问题是,ThreadPool是否会创建一个新的Thread并用一个新的One替换中断的线程?下面是线程执行的示例代码。问题是,当这个线程被中断时,线程池是否会用一个新线程替换这个线程?publicResponseMessagecall(){Futurefuture=CacheManager.getInstance().asyncFetch

java - Java获取CPU线程使用率

我对获取给定JNIblock的CPU利用率有疑问。我正在底层C++JNInative方法中进行一些密集的CPU计算。我正在优化此计算并希望根据不同的输入对其进行基准测试。我需要一些关于如何衡量这一点的指导。到目前为止,我考虑过的替代方案是使用JMXThreadMXBean测量调用JNI方法的当前线程的系统CPU使用率。但是,我不确定JNI代码是否在调用线程上下文中执行。当线程产生更多线程时会发生什么?使用JMXOperatingSystemMXBean获取整个JVM的CPU使用率。理想情况下,这不是我想要的,因为JVM中的并行执行可能会调整基准测试。使用getrusage(..)进行外

java - 其他线程中的忙循环延迟了 EDT 处理

我有一个Java程序,它在一个单独的(非EDT)线程上执行一个紧密循环。虽然我认为SwingUI应该仍然是响应式的,但事实并非如此。下面的示例程序展示了这个问题:单击“试试我”按钮应该会在大约半秒后弹出一个对话框,并且应该可以通过单击它的任何响应立即关闭该对话框。相反,对话框需要更长的时间才能出现,和/或在单击其中一个按钮后需要很长时间才能关闭。问题出现在Linux(两台具有不同发行版的不同机器)、Windows、RaspberryPi(仅限服务器VM)和MacOSX(由另一位SO用户报告)上。Java版本1.8.0_65和1.8.0_72(都试过了)具有多核的i7处理器。EDT应该有

《高效使用Redis》- 由面试题“Redis是否为单线程”引发的思考

由面试题“Redis是否为单线程”引发的思考很多人都遇到过这么一道面试题:Redis是单线程还是多线程?这个问题既简单又复杂。说他简单是因为大多数人都知道Redis是单线程,说复杂是因为这个答案其实并不准确。难道Redis不是单线程?我们启动一个Redis实例,验证一下就知道了。Redis安装部署方式如下所示://下载wgethttps://download.redis.io/redis-stable.tar.gztar-xzvfredis-stable.tar.gz//编译安装cdredis-stablemake//验证是否安装成功./src/redis-server-vRedisserve

java - 如何杀死等待Java中阻塞函数调用的线程?

我有一个主题:Threadt=newThread(){publicvoidrun(){ServerSocketConnectionscn=(ServerSocketConnection)Connector.open("socket://:1234");//Waitforaconnection.SocketConnectionsc=(SocketConnection)scn.acceptAndOpen();//dootheroperation}};t.start();假设没有客户端连接到服务器,那么这个线程将被阻塞。现在我想杀死上面的线程t?我怎样才能杀死它?

java - 在 Java 中动态更改处理线程的名称是个好主意吗?

我们有一个处理请求的Java应用程序。自然地,有一个线程池,其中的线程以一些无关紧要的名称命名,如“processor-1”、“processor-2”等。我们想知道每次收到对名称的请求时重命名处理线程是否是个好主意这将指示正在处理哪个请求。我觉得这件事有问题,但想不出一个好的理由。我记得几个从线程转储中分析多线程问题的案例,知道我是否在两个连续的转储中看到同一个线程对我来说非常重要。但是,我意识到我可以改为查看线程ID。在log4j日志中,写线程名称是一种常见的做法,我记得很多情况下都是通过它进行过滤的。但我仍然不确定我在这里是否有良好的“防线”。常见的做法是什么?继续重命名线程是个

java - 更好的方法来通知其他线程停止?

启动了几个工作线程,需要通知他们停止。由于某些线程在下一轮工作之前会hibernate一段时间,因此需要一种即使在hibernate时也能通知它们的方法。如果是Windows编程,我可以使用事件和等待函数。在Java中,我通过使用计数为1的CountDownLatch对象来执行此操作。它可以工作但感觉不优雅,尤其是我必须检查计数值以查看是否需要退出:run(){while(countDownLatch.count()>0){//working//...countDownLatch.wait(60,TimeUnit.SECONDS);}}Semaphore是另一种选择,但也感觉不太对。我

java - 如何实现线程安全的收集器?

我想要类似于Collectors.maxBy()的东西,一个获取集合中顶部元素的收集器(maxBy只获取一个)。我有一个Possibility的流可以用Integerscore(Possibility)评分的对象方法。首先我尝试了:Listpossibilities=getPossibilityStream().parallel().collect(Collectors.toList());if(!possibilities.isEmpty()){intbestScore=possibilities.stream().mapToInt(p->score(p)).max().getAsI

【Java多线程】面试常考——锁策略、synchronized的锁升级优化过程以及CAS(Compare and swap)

目录1、锁的策略1.1、乐观锁和悲观锁 1.2、轻量级锁和重量级锁1.3、自旋锁和挂起等待锁1.4、普通互斥锁和读写锁1.5、公平锁和非公平锁1.6、可重入锁和不可重入锁 2、synchronized内部的升级与优化过程2.1、锁的升级/膨胀2.1.1、偏向锁阶段2.1.2、轻量级锁阶段2.1.3、重量级锁阶段2.2、锁消除2.3、锁粗化3、CAS(Compareandswap)3.1、CAS的应用3.1.1、实现Atomic原子类3.1.2、实现自旋锁3.1.3、CAS的ABA问题1、锁的策略加锁过程中,处理冲突的过程中,涉及到的一些不同的处理方式,就叫锁的策略。1.1、乐观锁和悲观锁 乐观

java - 跟踪 Java 线程的创建和生命周期

是否有任何工具可用于跟踪Java线程的创建和生命周期?我会对以下所有内容感兴趣:调用newThread()的调用栈调用start()的调用栈run()方法的生命周期 最佳答案 我已经编写并发布了一个开源工具来回答这个问题。JavaLiveThreadAnalyser我已经在博客中介绍了该工具here. 关于java-跟踪Java线程的创建和生命周期,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/qu